#include <iostream>

using namespace std;

template <typename... T>
void print(const T&... args) {
  std::cout << (args << ... << '\n');  // print(1) 输出 1024, 因为括号的原因，相当于 1 << '\n' 即：1 << 10 == 1024
  std::cout << std::endl;
  std::cout << "......" << std::endl;
  std::cout << (args << ...) << '\n';  // 正确， print(1) 输出 1
  std::cout << std::endl;
  std::cout << "......" << std::endl;
  std::cout << (... << args) << '\n';
}

// 折叠表达式可以使用逗号运算符，这样就可以在一行调用多个函数
template <typename T>
void PrintOne(const T t) {
  std::cout << t << '\n';
}

template <typename... Types>
void CallPrint(Types&&... args) {
  (..., PrintOne(std::forward<Types>(args)));
}


int main() {
  print(1);
  std::cout << "===================\n";
  CallPrint(1, 2, 4);  //函数输出结果为：1,2,4
  return 0;
}